package com.example.wiki.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.wiki.entity.Ebook;
import com.example.wiki.entity.req.EbookQueryReq;
import com.example.wiki.entity.req.EbookSaveReq;
import com.example.wiki.entity.resp.CommonResp;
import com.example.wiki.entity.resp.EbookQueryResp;
import com.example.wiki.entity.resp.PageResp;
import com.example.wiki.service.IEbookService;
import com.example.wiki.util.CopyUtil;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * <p>
 * 电子书 前端控制器
 * </p>
 *
 * @author jerry
 * @since 2024-10-08
 */
@RestController
@RequestMapping("/ebook")
public class EbookController {

    //依赖业务层
    @Autowired
    IEbookService ebookService;

    //提供了文件上传的请求接口 [判断字段是否为空] http://localhost:8080/ebook/save?name=test-book1&cover=123.png
    @PostMapping("uploadImage") //
    public CommonResp uploadImage(@RequestParam(value = "file", required = false) MultipartFile file) {
        //文件上传处理
        String image = ebookService.uploadImage(file, "E:\\实训\\相思湖学院\\软件3班\\vuework\\wiki\\public\\image\\");
        //响应的对象数据
        CommonResp commonResp = new CommonResp();
        commonResp.setSuccess(true);
        commonResp.setContent(image);
        return commonResp;
    }


    //提供了修改请求接口 http://localhost:8088/ebook/delete?id=35
    @RequestMapping("delete")
    public CommonResp delete(Integer id) {
        //
        boolean ok = ebookService.removeById(id);//根据主键删除操作
        //响应的对象数据
        CommonResp commonResp = new CommonResp();
        commonResp.setSuccess(ok);
        return commonResp;
    }

    //提供了新增及修改请求接口 [判断字段是否为空] http://localhost:8080/ebook/save?name=test-book1&cover=123.png
    @PostMapping("save") //@RequestBody在请求体中获取数据  @Valid 要进行数据校验
    public CommonResp save(@RequestBody @Valid EbookSaveReq ebook) {
        //EbookSaveReq拷贝对象数据Ebook
        Ebook copy = CopyUtil.copy(ebook, Ebook.class);
        //saveOrUpdate新增或者修改【判断id是否存在则是修改、id不存在则是新增】
        boolean ok = ebookService.saveOrUpdate(copy);
        //响应的对象数据
        CommonResp commonResp = new CommonResp();
        commonResp.setSuccess(ok);
        return commonResp;
    }

    //提供了根据name模糊查询请求接口 http://localhost:8080/ebook/getById?id=36
    @RequestMapping("getById")
    public Ebook getById(Integer id) {
        return ebookService.getById(id);
    }

    //提供了根据name模糊查询请求接口 http://localhost:8080/ebook/query?name=My
    @RequestMapping("query")
    public CommonResp<PageResp<EbookQueryResp>> query(EbookQueryReq req) {
        return ebookService.query(req);
    }

    //提供了查询所有请求接口 http://localhost:8080/ebook/queryALL 【json、封装转换为响应的数据类型】
    @RequestMapping("queryALL")
    public CommonResp<List<EbookQueryResp>> queryALL() {
        //定义响应对象
        CommonResp<List<EbookQueryResp>> resp = new CommonResp<>();
        //查询List<Ebook> list
        List<Ebook> list = ebookService.list();
        //对象拷贝到EbookQueryResp
        List<EbookQueryResp> respList = CopyUtil.copyList(list, EbookQueryResp.class);
        //设置响应的数据、然后返回
        resp.setSuccess(true);
        resp.setContent(respList);
        return resp;
    }

}
